// @ts-nocheck
// 导入数据库
const db = require('../db')
// 导入jsonwebtoken
const jwt = require('jsonwebtoken')
// 导入bcryptjs
const bcrypt = require('bcryptjs')
// 导入config
const config = require('../../config')

// 注册逻辑
const register = (req,res) => {
    console.log("register",req.body)
    // 验证合理性
    // 定义sql语句
    const sql= 'select * from users where username=?'
    // 查询
    db.query(sql,[req.body.username],(err,results)=>{
        // 查询出错
        if(err) return res.cc(err)
        // 用户存在
        if(results.length>0) return res.cc('用户名已存在')
        // 用户不存在，可以注册
        // 密码加密
        req.body.password = bcrypt.hashSync(req.body.password,10)

        // 插入
        const sqlInsert = 'insert into users set ?'
        db.query(sqlInsert,{username:req.body.username,password:req.body.password},(err,results)=>{
            if(err) return res.cc(err)
            if(results.affectedRows!==1) return res.cc('注册失败')
            res.cc('注册成功',0)
        })
    })

}

const login = (req,res) => {
    // 接收表单数据
    const userinfo = req.body
    // 查询用户名是否存在
    const sql = 'select * from users where username=?'
    db.query(sql,userinfo.username,(err,results)=>{
        if(err) return res.cc(err)
        if(results.length!==1) return res.cc('登录失败')
        // 判断密码是否正确
        const compareResult = bcrypt.compareSync(userinfo.password,results[0].password)
        if(!compareResult) return res.cc('登录失败')
        // 生成token
        const user = {...results[0],password:''}
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
        res.send({
            status:0,
            message:'登录成功',
            token:'Bearer '+tokenStr,
            user
        })
    })
}

module.exports = {
    register,login
}

// exports.register = register; // 导出register函数